import { IPSCodeList } from '../codelist/ipscode-list';
import { IPSDataEntity } from '../dataentity/ipsdata-entity';
import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';
import { IPSSysModelGroup } from './ipssys-model-group';
import { IPSSysRef } from './ipssys-ref';
import { IPSWorkflow } from '../wf/ipsworkflow';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSystemModule
 */
export interface IPSSystemModule extends IPSModelObject {
  /**
   * 代码表集合
   *
   * @type {IPSCodeList[]}
   */
  getAllPSCodeLists(): IPSCodeList[] | null;

  /**
   * 代码表集合
   *
   * @type {IPSCodeList[]}
   */
  get allPSCodeLists(): IPSCodeList[] | null;

  findPSCodeList(objKey: any): IPSCodeList | null;

  /**
   * 实体集合
   *
   * @type {IPSDataEntity[]}
   */
  getAllPSDataEntities(): IPSDataEntity[] | null;

  /**
   * 实体集合
   *
   * @type {IPSDataEntity[]}
   */
  get allPSDataEntities(): IPSDataEntity[] | null;

  findPSDataEntity(objKey: any): IPSDataEntity | null;

  /**
   * 工作流集合
   *
   * @type {IPSWorkflow[]}
   */
  getAllPSWorkflows(): IPSWorkflow[] | null;

  /**
   * 工作流集合
   *
   * @type {IPSWorkflow[]}
   */
  get allPSWorkflows(): IPSWorkflow[] | null;

  findPSWorkflow(objKey: any): IPSWorkflow | null;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 默认数据源
   * @description 值模式 [云系统部署数据库模式] {DEFAULT：默认连接、 DB2：数据连接2、 DB3：数据连接3、 DB4：数据连接4、 DB5：数据连接5、 DB6：数据连接6、 DB7：数据连接7、 DB8：数据连接8、 DB9：数据连接9、 DB10：数据连接10、 DB11：数据连接11、 DB12：数据连接12 }
   * @type {( string | 'DEFAULT' | 'DB2' | 'DB3' | 'DB4' | 'DB5' | 'DB6' | 'DB7' | 'DB8' | 'DB9' | 'DB10' | 'DB11' | 'DB12')}
   */
  dSLink: string | 'DEFAULT' | 'DB2' | 'DB3' | 'DB4' | 'DB5' | 'DB6' | 'DB7' | 'DB8' | 'DB9' | 'DB10' | 'DB11' | 'DB12';

  /**
   * 模块编号
   * @type {string}
   */
  moduleSN: string;

  /**
   * 模块标记
   * @type {string}
   */
  moduleTag: string;

  /**
   * 模块标记2
   * @type {string}
   */
  moduleTag2: string;

  /**
   * 模块标记3
   * @type {string}
   */
  moduleTag3: string;

  /**
   * 模块标记4
   * @type {string}
   */
  moduleTag4: string;

  /**
   * 包代码名称
   * @type {string}
   */
  pKGCodeName: string;

  /**
   * 系统模型组
   *
   * @type {IPSSysModelGroup}
   */
  getPSSysModelGroup(): IPSSysModelGroup | null;

  /**
   * 系统模型组
   *
   * @type {IPSSysModelGroup}
   */
  get psSysModelGroup(): IPSSysModelGroup | null;

  /**
   * 系统模型组（必须存在）
   *
   * @type {IPSSysModelGroup}
   */
  getPSSysModelGroupMust(): IPSSysModelGroup;

  /**
   * 系统引用
   *
   * @type {IPSSysRef}
   */
  getPSSysRef(): IPSSysRef | null;

  /**
   * 系统引用
   *
   * @type {IPSSysRef}
   */
  get psSysRef(): IPSSysRef | null;

  /**
   * 系统引用（必须存在）
   *
   * @type {IPSSysRef}
   */
  getPSSysRefMust(): IPSSysRef;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 引用系统类型
   * @description 值模式 [云平台系统引用类型] {SUBSYS：平台子系统、 DEVSYS：开发系统组件、 DEVSYSCLOUD：开发系统云服务、 CLOUDHUBSUBAPP：Cloud集成子应用、 ETLEXTRACT：ETL展开逻辑、 ETLTRANSFORM：ETL转换逻辑、 ETLLOAD：ETL加载逻辑、 ETLSOURCE：ETL数据源（模型同步）、 ETLMODEL：ETL模型（模型同步）、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'SUBSYS' | 'DEVSYS' | 'DEVSYSCLOUD' | 'CLOUDHUBSUBAPP' | 'ETLEXTRACT' | 'ETLTRANSFORM' | 'ETLLOAD' | 'ETLSOURCE' | 'ETLMODEL' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  sysRefType: string | 'SUBSYS' | 'DEVSYS' | 'DEVSYSCLOUD' | 'CLOUDHUBSUBAPP' | 'ETLEXTRACT' | 'ETLTRANSFORM' | 'ETLLOAD' | 'ETLSOURCE' | 'ETLMODEL' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 模块功能参数
   * @type {IModel}
   */
  utilParams: IModel;

  /**
   * 模块功能标记
   * @type {string}
   */
  utilTag: string;

  /**
   * 模块功能类型
   * @description 值模式 [系统模块功能类型] {ADMIN：管理模块、 EAI：应用集成、 BI：智能报表、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'ADMIN' | 'EAI' | 'BI' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  utilType: string | 'ADMIN' | 'EAI' | 'BI' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 默认模块
   * @type {boolean}
   * @default false
   */
  defaultModule: boolean;

  /**
   * 子系统以云服务方式提供
   * @type {boolean}
   * @default false
   */
  subSysAsCloud: boolean;

  /**
   * 子系统模块
   * @type {boolean}
   * @default false
   */
  subSysModule: boolean;
}
